package br.com.smachado.calcados.ui.tipoproduto;

import br.com.smachado.calcados.entity.TipoProduto;
import br.com.smachado.calcados.service.TipoProdutoService;
import br.com.smachado.calcados.util.MensagemUtil;
import br.com.smachado.calcados.util.PropertiesUtil;
import java.util.ArrayList;
import java.util.List;
import javax.swing.table.DefaultTableModel;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;

/**
 * Formulário de pesquisa de tipos de produto
 * @author gu
 */
public class JFramePesquisaTipoProduto extends javax.swing.JFrame {
    
    private TipoProdutoService service;
    private List<TipoProduto> listaTipos;

    /**
     * Creates new form JFramePesquisaTipoProduto
     */
    public JFramePesquisaTipoProduto() {
        super(PropertiesUtil.getString("label.titulo.form.pesquisa.tipoProduto"));
        service = new TipoProdutoService();
        listaTipos = new ArrayList<TipoProduto>();
        initComponents();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        pesquisar = new javax.swing.JButton();
        novo = new javax.swing.JButton();
        jScrollPane1 = new javax.swing.JScrollPane();
        tabela = new javax.swing.JTable();
        nome = new javax.swing.JTextField();
        labelNome = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setAlwaysOnTop(true);
        setMinimumSize(new java.awt.Dimension(800, 600));
        setResizable(false);

        jPanel1.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));

        pesquisar.setText(PropertiesUtil.getString("label.pesquisar"));
        pesquisar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                pesquisarActionPerformed(evt);
            }
        });

        novo.setText(PropertiesUtil.getString("label.novo"));
        novo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                novoActionPerformed(evt);
            }
        });

        tabela.setAutoCreateRowSorter(true);
        tabela.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "", ""
            }
        ) {
            Class[] types = new Class [] {
                java.lang.Long.class, java.lang.String.class
            };
            boolean[] canEdit = new boolean [] {
                false, false
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        tabela.setCellSelectionEnabled(true);
        tabela.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tabelaMouseClicked(evt);
            }
        });
        jScrollPane1.setViewportView(tabela);
        tabela.getColumnModel().getSelectionModel().setSelectionMode(javax.swing.ListSelectionModel.SINGLE_INTERVAL_SELECTION);
        tabela.getColumnModel().getColumn(0).setMaxWidth(50);
        tabela.getColumnModel().getColumn(0).setHeaderValue(PropertiesUtil.getString("label.codigo"));
        tabela.getColumnModel().getColumn(1).setHeaderValue(PropertiesUtil.getString("label.descricao"));

        labelNome.setText(PropertiesUtil.getString("label.descricao.arg"));

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(labelNome)
                .addGap(4, 4, 4)
                .addComponent(nome, javax.swing.GroupLayout.PREFERRED_SIZE, 104, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(pesquisar)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(novo)
                .addContainerGap())
            .addComponent(jScrollPane1)
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(pesquisar)
                    .addComponent(novo)
                    .addComponent(nome, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(labelNome))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 287, Short.MAX_VALUE))
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    /**
     * Ação do botão Novo
     * @param evt 
     */
    private void novoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_novoActionPerformed
        evt.toString();
        JDialogCadastroTipoProduto frmCadastro = new JDialogCadastroTipoProduto(
                this, ((DefaultTableModel)tabela.getModel()),
                listaTipos, new TipoProduto());
        frmCadastro.setLocationRelativeTo(null);
        frmCadastro.setVisible(true);
    }//GEN-LAST:event_novoActionPerformed

    /**
     * Ação do botão pesquisar
     * @param evt 
     */
    private void pesquisarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_pesquisarActionPerformed
        evt.toString();
        
        String nomeStr = nome.getText();
        String filtro = StringUtils.isNotBlank(nomeStr) ? nomeStr : "%";
        this.listaTipos = (List<TipoProduto>) service.listarTiposProdutos(filtro.concat("%"));
        
        if(CollectionUtils.isNotEmpty(listaTipos)){
            
            DefaultTableModel model = (DefaultTableModel) tabela.getModel();
            model.setNumRows(0);
                        
            for(TipoProduto tipoProduto : listaTipos){
                
                Object[] linha = new Object[]{
                    tipoProduto.getId(),
                    tipoProduto.getDescricao()
                };
                model.addRow(linha);
            }
            
        }else{
            MensagemUtil.exibeMensagemErro(this, PropertiesUtil.getString(
                    "msg.erro.nenhum.registro.encontrado"));
        }
        
    }//GEN-LAST:event_pesquisarActionPerformed

    /**
     * Ação do clique duplo em um item da tabela
     * @param evt 
     */
    private void tabelaMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tabelaMouseClicked
        if(evt.getClickCount() == 2){
            DefaultTableModel defaultTableModel = (DefaultTableModel) tabela.getModel();
            
            //FIXME: tratar quando selecionar um item recem cadastrado
            TipoProduto tipoProduto = listaTipos.get(tabela.getSelectedRow());
            JDialogCadastroTipoProduto frmCadastro = 
                    new JDialogCadastroTipoProduto(this, defaultTableModel, 
                    listaTipos, tipoProduto);
            frmCadastro.setLocationRelativeTo(null);
            frmCadastro.setVisible(true);
            
        }
    }//GEN-LAST:event_tabelaMouseClicked

   
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JPanel jPanel1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JLabel labelNome;
    private javax.swing.JTextField nome;
    private javax.swing.JButton novo;
    private javax.swing.JButton pesquisar;
    private javax.swing.JTable tabela;
    // End of variables declaration//GEN-END:variables
}
